package leetcode.year2021.month12;

import java.util.HashMap;
import java.util.HashSet;

// 3. 无重复字符的最长子串
public class _03_3LengthOfLongestSubstring3 {
  /**
   * 思路： 使用滑动窗口解决改问题
   * @param s
   * @return
   */
  public int lengthOfLongestSubstring(String s) {
    HashSet<Character> cSet = new HashSet<>();
    int maxAns = 0;
    int cousor = 0;
    for (int i = 0; i < s.length(); i++) {
      if (i != 0){
        cSet.remove(s.charAt(i-1));
      }
      while (!cSet.contains(s.charAt(cousor)) && cousor < s.length()){
        cSet.add(s.charAt(cousor));
        cousor++;
      }
      maxAns = Math.max(maxAns, cousor - i);
    }
    return maxAns;
  }

  /**
   * 3. 无重复字符的最长子串
   * 给定一个字符串 s ，请你找出其中不含有重复字符的 最长子串 的长度。
   *
   *
   *
   * 示例 1:
   *
   * 输入: s = "abcabcbb"
   * 输出: 3
   * 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
   * 示例 2:
   *
   * 输入: s = "bbbbb"
   * 输出: 1
   * 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
   * 示例 3:
   *
   * 输入: s = "pwwkew"
   * 输出: 3
   * 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
   *      请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
   * 示例 4:
   *
   * 输入: s = ""
   * 输出: 0
   *
   *
   * 提示：
   *
   * 0 <= s.length <= 5 * 104
   * s 由英文字母、数字、符号和空格组成
   */
}
